package com.jqq.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * @author 姬倩倩
 * @date 2023-05-23
 * 1.@RequestMapping注解标识的位置：
 *  @RequestMapping标识一个类：设置映射请求的请求路径的初始信息
 *  @RequestMapping标识一个方法：设置映射请求的请求路径的具体信息
 * 2.@RequestMapping注解的value属性：
 *  通过请求路径来匹配请求
 *  value属性是数组类型，即一个控制方法可以对应多个请求路径
 * 3.@RequestMapping注解的method属性：
 *  通过请求的请求方式来匹配请求
 *  method属性是@RequestMethod类型的数组，即当前浏览器所发送请求的请求方式匹配method
 *   属性中的任何一种请求方式
 *  若浏览器所发送的请求的请求路径和@RequestMapping注解value属性匹配，但是请求方式不匹配
 *  此时页面报错：405 - Request method 'XXX' not supported
 *  4.@RequestMapping派生注解
 *  @GetMapping、@PostMapping、@DeleteMapping、@PutMapping、
 *  5.@RequestMapping的params属性
 *  通过请求的请求参数匹配请求 即浏览器发送的请求参数必须满足params属性的设置
 *  params可以使用4种表达式
 * 1) "param"：表示当前所匹配请求的请求参数中必须携带param参数
 * 2) "!param"：表示当前所匹配请求的请求参数中不能携带param参数
 * 3) "param=value"：表示当前所匹配请求的请求参数中必须携带param参数,且值必须为value
 * 4) "param!=value"：表示当前所匹配请求的请求参数中可以不携带param参数，若携带，其值一定不能是value
 * 1) 400 - Parameter conditions "username" not met for actual request parameters:
 * 2) 400 - Parameter conditions "username, !password" not met for actual request parameters: username={admin}, password={}
 * 3) 400 - Parameter conditions "username, !password, age=20" not met for actual request parameters: username={admin}
 * 4) 400 - Parameter conditions "username, !password, age=20, gender!=男" not met for actual request parameters: username={admin}, age={20}, gender={男}
 * 6.@RequestMapping的headers属性
 * 通过请求的请求头信息匹配请求，即浏览器发送的请求的请求头信息必须满足headers属性的设置
 * 请求路径匹配，但请求头信息不匹配时，会报错404
 * 7.SpringMVC支持ant风格的路径
 * 在@RequestMapping的属性值中设置一些特殊字符
 * ? 表示单个任意字符(不包括?本身，?用于表示请求路径和请求参数的分隔符)
 * * 表示0个或多个任意字符(不包括?和/)
 * **：表示任意层数的任意目录
 * 8.@RequestMapping注解使用路径中的占位符
 * 传统：/deleteUser?id=1
 * rest：/user/delete/1
 * 需要在@RequestMapping注解的value属性中所设置的路径中，使用{xxx}的方式表示路径的数据
 * 再通过@PathVariable注解，将占位符所标识的值和控制器方法的形参进行绑定
 */
@Controller
//@RequestMapping("/test")
public class TestRequestMappingController {

    //此时控制器方法所匹配的请求路径为/test/hello
    @RequestMapping(
            value = {"/hello","/abc"},
            method = {RequestMethod.POST,RequestMethod.GET},
            //params = {"username","!password","age=20","gender!=男"},
            headers = {"referer"}//f12+Network-Headers:Referer: http://localhost:8080/SpringMVC/
            )
    public String hello(){
        return "success";
    }

    //@RequestMapping("/a?a/test/ant")
    //@RequestMapping("/a*a/test/ant")
    @RequestMapping("/aa/**/ant")
    public String testAnt(){
        return "success";
    }

    @RequestMapping("/test/rest/{username}/{id}")
    public String testRest(@PathVariable("id") Integer id,@PathVariable("username") String username){
        System.out.println("id:"+id+",username:"+username);
        return "success";
    }
}
